package com.ruoyi.service.purchase;

import com.ruoyi.domain.purchase.MesPurchaseReturn;
import java.util.List;

/**
 * 采购退货主表Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IMesPurchaseReturnService {
    /**
     * 查询采购退货主表
     * 
     * @param returnId 采购退货主表主键
     * @return 采购退货主表
     */
    public MesPurchaseReturn selectMesPurchaseReturnByReturnId(Long returnId);

    /**
     * 查询采购退货主表列表（排除已完成）
     * 
     * @param mesPurchaseReturn 采购退货主表
     * @return 采购退货主表集合
     */
    public List<MesPurchaseReturn> selectMesPurchaseReturnList(MesPurchaseReturn mesPurchaseReturn);

    /**
     * 新增采购退货主表
     * 
     * @param mesPurchaseReturn 采购退货主表
     * @return 结果
     */
    public int insertMesPurchaseReturn(MesPurchaseReturn mesPurchaseReturn);

    /**
     * 修改采购退货主表
     * 
     * @param mesPurchaseReturn 采购退货主表
     * @return 结果
     */
    public int updateMesPurchaseReturn(MesPurchaseReturn mesPurchaseReturn);

    /**
     * 批量删除采购退货主表
     * 
     * @param returnIds 需要删除的采购退货主表主键集合
     * @return 结果
     */
    public int deleteMesPurchaseReturnByReturnIds(Long[] returnIds);

    /**
     * 删除采购退货主表信息
     * 
     * @param returnId 采购退货主表主键
     * @return 结果
     */
    public int deleteMesPurchaseReturnByReturnId(Long returnId);

    /**
     * 校验退货单号唯一性
     * 
     * @param returnCode 退货单号
     * @return 结果
     */
    public String checkReturnCodeUnique(String returnCode);

    /**
     * 执行采购退货
     * 
     * @param returnId 退货单ID
     * @return 结果
     */
    public int executeMesPurchaseReturn(Long returnId);

    /**
     * 查询已完成的退货单列表（用于历史记录）
     * 
     * @param mesPurchaseReturn 采购退货主表
     * @return 采购退货主表集合
     */
    public List<MesPurchaseReturn> selectCompletedReturnList(MesPurchaseReturn mesPurchaseReturn);

    /**
     * 审核采购退货单
     * 
     * @param returnId 退货单ID
     * @return 结果
     */
    public int approveMesPurchaseReturn(Long returnId);

    /**
     * 根据原入库单ID查询退货单列表
     * 
     * @param receiptId 原入库单ID
     * @return 退货单列表
     */
    public List<MesPurchaseReturn> selectReturnListByReceiptId(Long receiptId);

    /**
     * 根据供应商ID查询退货单列表
     * 
     * @param supplierId 供应商ID
     * @return 退货单列表
     */
    public List<MesPurchaseReturn> selectReturnListBySupplierId(Long supplierId);

    /**
     * 根据仓库ID查询退货单列表
     * 
     * @param warehouseId 仓库ID
     * @return 退货单列表
     */
    public List<MesPurchaseReturn> selectReturnListByWarehouseId(Long warehouseId);

    /**
     * 根据退货类型查询退货单列表
     * 
     * @param returnType 退货类型
     * @return 退货单列表
     */
    public List<MesPurchaseReturn> selectReturnListByType(String returnType);
}